home *** CD-ROM | disk | FTP | other *** search
/ Light ROM 1 / LIGHT-ROM 1 (Amiga Library Services)(1994).iso / ffdisks / d883.lha / BBBBS / BBBBS59.lha / rexx / bbsMAINT.baud < prev    next >
Text File  |  1993-05-31  |  3KB  |  170 lines

  1. /*     $VER: bbsMAINT.baud 5.9  31 May 1993  (31.5.93)
  2. copyright 1990-93 Richard Lee Stockton  FREELY DISTRIBUTABLE
  3.  
  4. this will check all message dirs for oldest messages, (that don't
  5. have '!!' as the first characters), and delete a few (1%) of them
  6. This macro is called after logout IF the grand total of messages
  7. exceeds the maximum set in the CONFIG.BBS file. Note that as of 4.0
  8. messages are copied to the sysop's email drawer before deletion.
  9. As of 5.9, a minimum of 10 messages are left in each conference.
  10.  
  11. dat.conf.0=lowest
  12. dat.conf.1=highest
  13. dat.conf.2=oldest
  14. dat.conf.3=seqdate of oldest
  15. */
  16.  
  17. bbspath=GETCLIP('BBS_path')
  18. msgpath=GETCLIP('BBS_msgpath')
  19.  
  20. ARG SYSTEM_MSG_LIMIT sysop .
  21.  
  22. CALL CLOSE(STDOUT)
  23. CALL OPEN(STDOUT,'RAM:bbsMAINT.STDOUT','W')
  24.  
  25. dat.=''
  26. dat.0.1=0
  27. totmsgs=0
  28. DO conf=1 TO 99
  29.   dat.conf.2=0
  30.   temp=WORDS(SHOWDIR(msgpath'MSG'conf))
  31.   IF temp=0 THEN
  32.     DO
  33.       dat.conf.1=0
  34.       ITERATE conf
  35.     END
  36.   totmsgs=totmsgs+temp
  37. END
  38. IF totmsgs<SYSTEM_MSG_LIMIT THEN EXIT
  39.  
  40. tot2kill=SYSTEM_MSG_LIMIT%100
  41. IF tot2kill<1 THEN tot2kill=1
  42. tot2kill=tot2kill+totmsgs-SYSTEM_MSG_LIMIT
  43. killed=0
  44.  
  45. DO conf=1 TO 99
  46.   IF dat.conf.1=0 THEN ITERATE conf
  47.   dat.conf.0=countcheck('FirstMessage'conf)
  48.   dat.conf.1=countcheck('LastMessage'conf)
  49.   dat.conf.2=dat.conf.0-1
  50.   CALL get_next()
  51. END
  52.  
  53. DO k=1 TO tot2kill
  54.   conf=which()
  55.   temp=dat.conf.2
  56.   IF temp>0 THEN
  57.     IF kill_one(temp) THEN
  58.       killed=killed+1
  59. END
  60. EXIT
  61.  
  62.  
  63.  
  64. which:
  65. oldest=99999999
  66. oldnum=0
  67. DO i=1 TO 99
  68.   IF dat.i.1=0 | dat.i.3='' THEN ITERATE i
  69.   IF dat.i.3<oldest THEN
  70.     DO
  71.       oldest=dat.i.3
  72.       oldnum=i
  73.     END
  74. END
  75. RETURN oldnum
  76.  
  77.  
  78. get_next:
  79. IF dat.conf.1=0 | dat.conf.1=dat.conf.2 THEN RETURN
  80. thisconf=msgpath'MSG'conf
  81. msglist=SHOWDIR(thisconf)
  82. IF WORDS(msglist)<11 THEN
  83.   DO
  84.     dat.conf.1=0
  85.     RETURN
  86.   END
  87. dat.conf.3=''
  88. DO msgnum=dat.conf.2+1 TO dat.conf.1-1
  89.   IF FIND(msglist,msgnum)=0 THEN ITERATE msgnum
  90.   dat.conf.3=get_date(msgnum)
  91.   IF dat.conf.3~='' THEN LEAVE msgnum
  92. END
  93. dat.conf.2=msgnum
  94. IF msgnum=dat.conf.1 THEN dat.conf.1=0
  95. RETURN
  96.  
  97.  
  98. get_date:
  99. ARG msg .
  100. x=OPEN(f,thisconf'/'msg,'R')
  101. IF x=0 THEN RETURN ''
  102. line=READLN(f)
  103. IF LEFT(line,2)='!!' THEN
  104.   DO
  105.     CALL CLOSE(f)
  106.     RETURN ''
  107.   END
  108. line=READLN(f)
  109. line=READLN(f)
  110. line=READLN(f)
  111. line=READLN(f)
  112. CALL CLOSE(f)
  113. dateline=SPACE(WORD(line,3) WORD(line,4) WORD(line,5),1)
  114. seqdate=norm2seq(dateline)
  115. RETURN seqdate
  116.  
  117.  
  118. kill_one:
  119. ARG killnum .
  120. x=OPEN(f,msgpath'MSG'conf'/'killnum,'R')
  121. IF x=0 THEN RETURN 0
  122. data=READCH(f,65000)
  123. CALL CLOSE(f)
  124. CALL DELAY(28)
  125. mailname='MSG'conf'.'killnum
  126. x=OPEN(f,bbspath'Email/'sysop'/'mailname,'W')
  127. IF x=0 THEN RETURN 0
  128. CALL WRITECH(f,data)
  129. CALL CLOSE(f)
  130. CALL DELETE(msgpath'MSG'conf'/'killnum)
  131. CALL get_next()
  132. RETURN 1
  133.  
  134.  
  135. countcheck:
  136. PARSE ARG filename
  137. IF filename='' THEN RETURN 0
  138. filename=bbspath'Numbers/'filename
  139. x=OPEN(f,filename,'R')
  140. IF x=0 THEN RETURN 0
  141. cc=READLN(f)
  142. CALL CLOSE(f)
  143. RETURN cc
  144.  
  145.  
  146. norm2seq:     /* takes '3 Jan 1990' and turns it into '19900103' */
  147. ARG da' 'mo' 'yr .
  148. da=da/1
  149. mo=STRIP(mo)
  150. yr=yr/1
  151. IF da<10 THEN da='0'da
  152. SELECT
  153.   WHEN mo='JAN' THEN mo='01'
  154.   WHEN mo='FEB' THEN mo='02'
  155.   WHEN mo='MAR' THEN mo='03'
  156.   WHEN mo='APR' THEN mo='04'
  157.   WHEN mo='MAY' THEN mo='05'
  158.   WHEN mo='JUN' THEN mo='06'
  159.   WHEN mo='JUL' THEN mo='07'
  160.   WHEN mo='AUG' THEN mo='08'
  161.   WHEN mo='SEP' THEN mo='09'
  162.   WHEN mo='OCT' THEN mo='10'
  163.   WHEN mo='NOV' THEN mo='11'
  164.   WHEN mo='DEC' THEN mo='12'
  165.   OTHERWISE RETURN(-1);
  166. END
  167. RETURN yr||mo||da
  168.  
  169. /* bbsMAINT.baud */
  170.